package pe.gob.mininter.dirandro.vaadin.panel.busqueda;

import java.util.List;

import pe.gob.mininter.dirandro.model.Arma;
import pe.gob.mininter.dirandro.model.DetExpedientePersona;
import pe.gob.mininter.dirandro.model.Empresa;
import pe.gob.mininter.dirandro.model.Expediente;
import pe.gob.mininter.dirandro.model.Opcion;
import pe.gob.mininter.dirandro.model.Organizacion;
import pe.gob.mininter.dirandro.model.Persona;
import pe.gob.mininter.dirandro.service.ExpedientePersonaService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.DirandroComponent;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
public class PanelBuscaPersona extends DirandroComponent implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
	
	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout pnlPrincipal;
	@AutoGenerated
	private Table tblPersona;
	@AutoGenerated
	private HorizontalLayout lytFiltro3;
	@AutoGenerated
	private Button btnBuscar;
	@AutoGenerated
	private TextField txtAlias;
	@AutoGenerated
	private ComboBoxLOVS cmbSituacion;
	@AutoGenerated
	private PopupDateField dtIntervencion;
	@AutoGenerated
	private ComboBox cmbOcupacion;
	@AutoGenerated
	private HorizontalLayout lytFiltro2;
	@AutoGenerated
	private TextField txtOrganizacion;
	@AutoGenerated
	private CheckBox chkRequisitoria;
	@AutoGenerated
	private TextField txtExpediente;
	@AutoGenerated
	private ComboBoxLOVS cmbEstado;
	@AutoGenerated
	private HorizontalLayout lytFiltro1;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoParticipacion;
	@AutoGenerated
	private ComboBoxLOVS cmbParticipacion;
	@AutoGenerated
	private TextField txtEmpresa;
	@AutoGenerated
	private TextField txtInvolucrado;
	private static final String COLUMN_ID = "COLUMN_ID";
	private static final String COLUMN_INVOLUCRADO = "COLUMN_INVOLUCRADO";
	private static final String COLUMN_EMPRESA = "COLUMN_EMPRESA";
	private static final String COLUMN_PARTICIPACION = "COLUMN_PARTICIPACION";
	private static final String COLUMN_TIPO_PARTICIPACION = "COLUMN_TIPO_PARTICIPACION";
	private static final String COLUMN_ESTADO_DATO = "COLUMN_ESTADO_DATO";
	private static final String COLUMN_EXPEDIENTE = "COLUMN_EXPEDIENTE";
	private static final String COLUMN_REQUISITORIA = "COLUMN_REQUISITORIA";
	private static final String COLUMN_ORGANIZACION = "COLUMN_ORGANIZACION";
	private static final String COLUMN_OCUPACION = "COLUMN_OCUPACION";
	private static final String COLUMN_INTERVENCION = "COLUMN_INTERVENCION";
	private static final String COLUMN_SITUACION = "COLUMN_SITUACION";
	private static final String COLUMN_ALIAS = "COLUMN_ALIAS";
	
	ExpedientePersonaService personaService;
	
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelBuscaPersona(List<Opcion> acciones, String height) {
		super(acciones, height);
		buildMainLayout();
		personaService = Injector.obtenerServicio(ExpedientePersonaService.class);
		setCompositionRoot(mainLayout);
		postConstruct();
		debugId();
	}
	
	private void debugId(){
		
	}
	
	public void postConstruct() {
		txtInvolucrado.setInputPrompt("Involucrado");
		txtEmpresa.setInputPrompt("Empresa");
		cmbParticipacion.setInputPrompt("Participacion");
		cmbParticipacion.setCodigoLista(Constante.LISTA.CODIGO.PARTICIPACION);
		cmbTipoParticipacion.setInputPrompt("Tipo Participacion");
		cmbTipoParticipacion.setCodigoLista(Constante.LISTA.CODIGO.TIPO_PARTICIPAC);
		cmbEstado.setInputPrompt("Estado");
		cmbEstado.setCodigoLista(Constante.LISTA.CODIGO.ESTADO_PARTICIPACION);
		txtExpediente.setInputPrompt("Expediente");
		txtOrganizacion.setInputPrompt("Organizacion");
		cmbOcupacion.setInputPrompt("Ocupacion");
		dtIntervencion.setInputPrompt("Intervencion");
		cmbSituacion.setInputPrompt("Situacion");
		cmbSituacion.setCodigoLista(Constante.LISTA.CODIGO.SITUACION_GENERAL);
		txtAlias.setInputPrompt("Alias");
		/*List<ModeloMarca> modeloMarcas=modeloMarcaService.buscarHijos(new ModeloMarca(Constante.MODELO_MARCA.ARMAS.TIPOS));
		cmbModelo.setInputPrompt("Modelo");
		cmbModelo.setItemCaptionPropertyId("nombre");
		cmbModelo.setContainerDataSource(new BeanItemContainer<ModeloMarca>(ModeloMarca.class,  modeloMarcas));*/
		/*cmbClasificacion.setInputPrompt("Clasificacion");
		cmbClasificacion.setCodigoLista(Constante.LISTA.CODIGO.TIPO_CALIBRE);*/
		/*cmbEstadoSerie.setInputPrompt("Estado Serie");
		cmbEstadoSerie.setCodigoLista(Constante.LISTA.CODIGO.ARMA_ESTADO_SERIE);
		cmbCalibre.setInputPrompt("Calibre");
		cmbCalibre.setCodigoLista(Constante.LISTA.CODIGO.TIPO_CALIBRE);
		*/
		btnBuscar.addListener(this);
		
		tblPersona.setColumnCollapsingAllowed(true);
		cargarTabla(null);
	}
	
		
	private void cargarTabla(List<DetExpedientePersona> personas)
	{
		IndexedContainer container = new IndexedContainer();
        
        container.addContainerProperty(COLUMN_ID, Long.class,  null);
        container.addContainerProperty(COLUMN_INVOLUCRADO, String.class,  null);
        container.addContainerProperty(COLUMN_EMPRESA, String.class,  null);
        container.addContainerProperty(COLUMN_PARTICIPACION, String.class,  null);
        container.addContainerProperty(COLUMN_TIPO_PARTICIPACION, String.class,  null);
        container.addContainerProperty(COLUMN_ESTADO_DATO, String.class,  null);
        container.addContainerProperty(COLUMN_EXPEDIENTE, String.class,  null);
        container.addContainerProperty(COLUMN_REQUISITORIA, String.class,  null);
        container.addContainerProperty(COLUMN_ORGANIZACION, String.class,  null);
        container.addContainerProperty(COLUMN_OCUPACION, String.class,  null);
        container.addContainerProperty(COLUMN_INTERVENCION, String.class,  null);
        container.addContainerProperty(COLUMN_SITUACION, String.class,  null);
        container.addContainerProperty(COLUMN_ALIAS, String.class,  null);
        
        if(personas!=null){
	        int con=1;
	        for (DetExpedientePersona persona : personas) {
	                Item item = container.addItem(con++);
				    item.getItemProperty(COLUMN_ID).setValue(persona.getId());
				    item.getItemProperty(COLUMN_INVOLUCRADO).setValue(persona.getInvolucrado()!=null ? 
				    		persona.getInvolucrado().getNombreCompleto() : null);
				    item.getItemProperty(COLUMN_EMPRESA).setValue(persona.getEmpresaInvolucrada()!=null ? 
				    		persona.getEmpresaInvolucrada().getRazonSocial() : null);
				    item.getItemProperty(COLUMN_PARTICIPACION).setValue(persona.getParticipacion()!=null ?
				    		persona.getParticipacion().getNombre() : null);
				    /*item.getItemProperty(COLUMN_TIPO_PARTICIPACION).setValue(persona.getTipoParticipacion()!=null ? 
				    		persona.getTipoParticipacion() : null);*/
				    item.getItemProperty(COLUMN_ESTADO_DATO).setValue(persona.getEstadoDato()!=null ?
				    		persona.getEstadoDato().getNombre() : null);
				    item.getItemProperty(COLUMN_EXPEDIENTE).setValue(persona.getExpediente()!=null ?
				    		persona.getExpediente().getAutogenerado() : null);
				    /*item.getItemProperty(COLUMN_REQUISITORIA).setValue(persona.getEstadoDato()!=null ?
				    		persona.getEstadoDato().getNombre() : null);*/
				    item.getItemProperty(COLUMN_ORGANIZACION).setValue(persona.getOrganizacion()!=null ?
				    		persona.getOrganizacion().getNombre() : null);
				    item.getItemProperty(COLUMN_OCUPACION).setValue(persona.getOcupacion()!=null ?
				    		persona.getOcupacion().getNombre() : null);
				    item.getItemProperty(COLUMN_INTERVENCION).setValue(persona.getIntervencion());
				    item.getItemProperty(COLUMN_SITUACION).setValue(persona.getSituacion()!=null ?
				    		persona.getSituacion().getNombre() : null);
				    item.getItemProperty(COLUMN_ALIAS).setValue(persona.getAlias());
	        }
        }
        
        tblPersona.setContainerDataSource(container);
        tblPersona.setVisibleColumns(new Object[]{COLUMN_INVOLUCRADO, COLUMN_EMPRESA, COLUMN_PARTICIPACION, COLUMN_TIPO_PARTICIPACION, 
        		COLUMN_ESTADO_DATO, COLUMN_EXPEDIENTE, COLUMN_REQUISITORIA, COLUMN_ORGANIZACION, 
        		COLUMN_OCUPACION, COLUMN_INTERVENCION, COLUMN_SITUACION, COLUMN_ALIAS});
        tblPersona.setColumnWidth(COLUMN_INVOLUCRADO, 100);
        tblPersona.setColumnWidth(COLUMN_EMPRESA, 100);
        tblPersona.setColumnWidth(COLUMN_PARTICIPACION, 100);
        tblPersona.setColumnWidth(COLUMN_TIPO_PARTICIPACION, 100);
        tblPersona.setColumnWidth(COLUMN_ESTADO_DATO, 100);
        tblPersona.setColumnWidth(COLUMN_EXPEDIENTE, 100);
        tblPersona.setColumnWidth(COLUMN_REQUISITORIA, 100);
        tblPersona.setColumnWidth(COLUMN_ORGANIZACION, 100);
        tblPersona.setColumnWidth(COLUMN_OCUPACION, 100);
        tblPersona.setColumnWidth(COLUMN_INTERVENCION, 100);
        tblPersona.setColumnWidth(COLUMN_SITUACION, 100);
        tblPersona.setColumnWidth(COLUMN_ALIAS, 100);
        tblPersona.setColumnHeader(COLUMN_INVOLUCRADO, "Involucrado");
        tblPersona.setColumnHeader(COLUMN_EMPRESA, "Empresa");
        tblPersona.setColumnHeader(COLUMN_PARTICIPACION, "Participacion");
        tblPersona.setColumnHeader(COLUMN_TIPO_PARTICIPACION, "Tipo Participacion");
        tblPersona.setColumnHeader(COLUMN_ESTADO_DATO, "Estado Dato");
        tblPersona.setColumnHeader(COLUMN_EXPEDIENTE, "Expediente");
        tblPersona.setColumnHeader(COLUMN_REQUISITORIA, "Requisitoria");
        tblPersona.setColumnHeader(COLUMN_ORGANIZACION, "Organizacion");
        tblPersona.setColumnHeader(COLUMN_OCUPACION, "Ocupacion");
        tblPersona.setColumnHeader(COLUMN_INTERVENCION, "Intervencion");
        tblPersona.setColumnHeader(COLUMN_SITUACION, "Situacion");
        tblPersona.setColumnHeader(COLUMN_ALIAS, "Alias");
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnBuscar)){
			DetExpedientePersona persona=new DetExpedientePersona();
			Persona involucrado=new Persona();
			involucrado.setNombres((String)txtInvolucrado.getValue());
			persona.setInvolucrado(involucrado);
			Empresa empresaInvolucrada=new Empresa();
			empresaInvolucrada.setRazonSocial((String)txtEmpresa.getValue());
			persona.setEmpresaInvolucrada(empresaInvolucrada);
			persona.setParticipacion(cmbParticipacion.getValor());
			persona.setEstadoDato(cmbEstado.getValor());
			Expediente expediente=new Expediente();
			expediente.setAutogenerado((String)txtExpediente.getValue());
			persona.setExpediente(expediente);
			Organizacion organizacion=new Organizacion();
			organizacion.setNombre((String)txtOrganizacion.getValue());
			persona.setOrganizacion(organizacion);
			persona.setSituacion(cmbSituacion.getValor());
			persona.setAlias((String)txtAlias.getValue());
			cargarTabla(personaService.buscarBusqueda(persona));
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// pnlPrincipal
		pnlPrincipal = buildPnlPrincipal();
		mainLayout.addComponent(pnlPrincipal);
		mainLayout.setComponentAlignment(pnlPrincipal, new Alignment(20));
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildPnlPrincipal() {
		// common part: create layout
		pnlPrincipal = new VerticalLayout();
		pnlPrincipal.setStyleName("whiteBackGround");
		pnlPrincipal.setImmediate(false);
		pnlPrincipal.setWidth("800px");
		pnlPrincipal.setHeight("-1px");
		pnlPrincipal.setMargin(true);
		pnlPrincipal.setSpacing(true);
		
		// lytFiltro1
		lytFiltro1 = buildLytFiltro1();
		pnlPrincipal.addComponent(lytFiltro1);
		
		// lytFiltro2
		lytFiltro2 = buildLytFiltro2();
		pnlPrincipal.addComponent(lytFiltro2);
		
		// lytFiltro3
		lytFiltro3 = buildLytFiltro3();
		pnlPrincipal.addComponent(lytFiltro3);
		
		// tblPersona
		tblPersona = new Table();
		tblPersona.setImmediate(false);
		tblPersona.setWidth("730px");
		tblPersona.setHeight("350px");
		pnlPrincipal.addComponent(tblPersona);
		
		return pnlPrincipal;
	}

	@AutoGenerated
	private HorizontalLayout buildLytFiltro1() {
		// common part: create layout
		lytFiltro1 = new HorizontalLayout();
		lytFiltro1.setImmediate(false);
		lytFiltro1.setWidth("-1px");
		lytFiltro1.setHeight("-1px");
		lytFiltro1.setMargin(false);
		lytFiltro1.setSpacing(true);
		
		// txtInvolucrado
		txtInvolucrado = new TextField();
		txtInvolucrado.setImmediate(false);
		txtInvolucrado.setWidth("150px");
		txtInvolucrado.setHeight("-1px");
		lytFiltro1.addComponent(txtInvolucrado);
		
		// txtEmpresa
		txtEmpresa = new TextField();
		txtEmpresa.setImmediate(false);
		txtEmpresa.setWidth("150px");
		txtEmpresa.setHeight("-1px");
		lytFiltro1.addComponent(txtEmpresa);
		
		// cmbParticipacion
		cmbParticipacion = new ComboBoxLOVS();
		cmbParticipacion.setImmediate(false);
		cmbParticipacion.setWidth("150px");
		cmbParticipacion.setHeight("-1px");
		lytFiltro1.addComponent(cmbParticipacion);
		
		// cmbTipoParticipacion
		cmbTipoParticipacion = new ComboBoxLOVS();
		cmbTipoParticipacion.setImmediate(false);
		cmbTipoParticipacion.setWidth("150px");
		cmbTipoParticipacion.setHeight("-1px");
		lytFiltro1.addComponent(cmbTipoParticipacion);
		
		return lytFiltro1;
	}

	@AutoGenerated
	private HorizontalLayout buildLytFiltro2() {
		// common part: create layout
		lytFiltro2 = new HorizontalLayout();
		lytFiltro2.setImmediate(false);
		lytFiltro2.setWidth("-1px");
		lytFiltro2.setHeight("-1px");
		lytFiltro2.setMargin(false);
		lytFiltro2.setSpacing(true);
		
		// cmbEstado
		cmbEstado = new ComboBoxLOVS();
		cmbEstado.setImmediate(false);
		cmbEstado.setWidth("150px");
		cmbEstado.setHeight("-1px");
		lytFiltro2.addComponent(cmbEstado);
		
		// txtExpediente
		txtExpediente = new TextField();
		txtExpediente.setImmediate(false);
		txtExpediente.setWidth("150px");
		txtExpediente.setHeight("-1px");
		lytFiltro2.addComponent(txtExpediente);
		
		// chkRequisitoria
		chkRequisitoria = new CheckBox();
		chkRequisitoria.setCaption("Requisitoria");
		chkRequisitoria.setImmediate(false);
		chkRequisitoria.setWidth("150px");
		chkRequisitoria.setHeight("-1px");
		lytFiltro2.addComponent(chkRequisitoria);
		
		// txtOrganizacion
		txtOrganizacion = new TextField();
		txtOrganizacion.setImmediate(false);
		txtOrganizacion.setWidth("150px");
		txtOrganizacion.setHeight("-1px");
		lytFiltro2.addComponent(txtOrganizacion);
		
		return lytFiltro2;
	}

	@AutoGenerated
	private HorizontalLayout buildLytFiltro3() {
		// common part: create layout
		lytFiltro3 = new HorizontalLayout();
		lytFiltro3.setImmediate(false);
		lytFiltro3.setWidth("-1px");
		lytFiltro3.setHeight("-1px");
		lytFiltro3.setMargin(false);
		lytFiltro3.setSpacing(true);
		
		// cmbOcupacion
		cmbOcupacion = new ComboBox();
		cmbOcupacion.setImmediate(false);
		cmbOcupacion.setWidth("150px");
		cmbOcupacion.setHeight("-1px");
		lytFiltro3.addComponent(cmbOcupacion);
		
		// dtIntervencion
		dtIntervencion = new PopupDateField();
		dtIntervencion.setImmediate(false);
		dtIntervencion.setWidth("150px");
		dtIntervencion.setHeight("-1px");
		lytFiltro3.addComponent(dtIntervencion);
		
		// cmbSituacion
		cmbSituacion = new ComboBoxLOVS();
		cmbSituacion.setImmediate(false);
		cmbSituacion.setWidth("150px");
		cmbSituacion.setHeight("-1px");
		lytFiltro3.addComponent(cmbSituacion);
		
		// txtAlias
		txtAlias = new TextField();
		txtAlias.setImmediate(false);
		txtAlias.setWidth("150px");
		txtAlias.setHeight("-1px");
		lytFiltro3.addComponent(txtAlias);
		
		// btnBuscar
		btnBuscar = new Button();
		btnBuscar.setCaption("Buscar");
		btnBuscar.setImmediate(true);
		btnBuscar.setWidth("-1px");
		btnBuscar.setHeight("-1px");
		lytFiltro3.addComponent(btnBuscar);
		
		return lytFiltro3;
	}	

}
